#ifndef NTK_VS_H
#include "ntk_vs.h"
#endif
#ifndef STDIO_H
#include <stdio.h>
#endif
#ifndef SENSOREN_H
#include "Sensoren.h"
#endif

//De data van het form komt uit de mailbox
mailBox *input;

//De knop die ingedrukt is. (in het geval dat er geen is ingedrukt komt hier niets in en stuurt deze dus ook niets.)
mailBox *output;

//Deze methode initialiseert de sensoren en zorgt ervoor
//Dat data een korte bewerking krijgt alvorens deze naar
//hoofd wordt gestuurt.
unsigned __stdcall InitSensoren(void* arg)
{
	task* t=(task*)arg;
	//sout is van het type SensorDataOut en is een struct, vandaar dat malloc gebruikt wordt
	SensorDataOut *sout = (SensorDataOut*)malloc(sizeof(SensorDataOut));
	//De mailBoxen worden uitgelezen
	SensorData *sd = (SensorData *)getArgument_task(t);
	//De input mailbox wordt goed gezet
	input = (*sd).input;	
	//De output mailbox wordt goed gezet.
	output = (*sd).output;
	Input invoer;
	int gasoud=0,remoud=0,koppelingoud=0,voud=0;
	while(!isTerminated_task(t)){
		//wacht op mail
		get_mailBox(input,&invoer);
		//indien er mail is moet de snelheid altijd worden overgezet naar de
		//sensor out (sout)
		(*sout).snelheid = invoer.snelheid;
		/*dat een pedaal verandert moet niet uitmaken voor het systeem,
		  met betrekking tot welk pedaal. Echter is het niet aan het hoofdsysteem
		  om te bepalen of een pedaal verder wordt ingedrukt of niet
		*/
		if((gasoud-invoer.gas) < 0 ||(remoud-invoer.rem) < 0 || (koppelingoud-invoer.koppeling) < 0)
		{
			(*sout).Actie = pedaalIndrukken;
		}
		/*er hoeft niet altijd een knop ingedrukt te worden.
		  in sommige gevallen zal er geen knop worden ingedrukt
		  maar zal er wel een wijziging in de snelheid zijn
		  dit resulteert erin dat invoer.knop == NULL en dat het
		  systeem een controle op de snelheid moet uitvoeren
		*/
		if(invoer.knop != NULL)
		{
			//voor iedere knop die wordt ingedrukt moet een ander signaal
			//worden gegeven aan sout.Actie
			switch(invoer.knop)
			{
			case (activatie):
				(*sout).Actie = activatieknopIndrukken;
				break;
			case(snelheidVerhogen):
				(*sout).Actie = snelheidverhogen;
				break;
			case(snelheidVerlagen):
				(*sout).Actie = snelheidverlagen;
				break;
			case(pauzeknop):
				(*sout).Actie = pauzeknopIndrukken;
				break;
			}
		} else {
			(*sout).Actie = snelheidaanpassen;
		}
		//de samengestelde sout moet in de mailbox worden gezet
		put_mailBox(output,sout);
	}
	//als de taak wordt verwijdert moet het geheugen van sout worden
	//vrijgegeven
	free(sout);
	return 0;
}